11.4.1. Çırpı Fonksiyonu Örneği
Örnek: Komut Çözümleme
Bir robot dilinin içerisinde herbiri 1 harften oluşan 26 komut vardır.
Komutların herbiri için birer C fonksiyonu yazılmış olup bir yorumlayıcı
yazılması istenmektedir. Böylece komut kodu çözülecek ve ilgili komuta
ait kodun bulunduğu yere dallanılarak komutların yürütülmesi sağlanacaktır.
İlgili yorumlayıcıyı çırpı algoritması uyarınca tasarlayınız. Başka hangi
yöntemle tasarlanabileceğini tartışınız.
Çözüm: Bu tasarım süreci üç adımda yapılır:
Herşeyden önce komut adları ve onlara ait C kodunun bellek adreslerini
içeren bir tablo oluşturulmalıdır.
Daha sonra bir çırpı fonksiyonu üretilerek gelen komut koduna ait indis
bilgisi elde edilmelidir.
Bu
indis değeri aracılığıyla ilgili komut adresi bir işaretçi değişkene atanır
ve doğrudan o komuta ait fonksiyon çağrılır.
Komut adları tek harften oluşuyordu; aşağıda görüldüğü gibi alfabetik
olarak sıralanıp her satırın yan gözüne de komut adresleri yazılırsa Çırpı
Tablosu elde edilmiş olunur.
Çırpı fonksiyonu bulma, üretme veya belirleme biraz da tasarımcının öngörüsüne
bağlıdır; bu örnek için oldukça yalın bir çırpı fonksiyonu bulunabilir.
Çünkü işleme sokulacak parametre bir karakterden oluşmaktadır. Karakter
sayısı arttıkça ideal bir çırpı fonksiyonu bulmak güçleşir. Eğe komutlar
yukarıdaki tabloda olduğu gibi A'dan başlanıp Z'ye kadar alfabetik olarak
sıralanırsa, çırpı fonksiyonu A için 0 ve sırasıyla B, C... Y, Z için
1, 2, ... 25, 26 tamsayılarını üretmelidir. Bu da ASCII tabloya göre,
büyük harfler için, karakterden 65 sayısı çıkarılarak elde edilir. ASCII
tabloya göre A harfi 65, B harfi 66 koduna sahiptir ve diğerleri de 67,
68 olarak gider. Dolayısıyla çırpı fonksiyonu H=kr-65 olarak
bulunur. Bu fonksiyon her komut için ayrı bir tamsayı üreteceği için idealdir.
|